ExcelVBAPartsCollection Home Excel Reference Manual DownLoad My Profile
Menu Back Next Links Excel Function Manual Myself My BBS


セル情報の取得

 





行数・列数の取得

「Row」と「Rows」、「Column」と「Columns」の相違
「Row」は行番号を求めるプロパティ、「Rows」は行数を求めるプロパティです。
「Column」は列番号を求めるプロパティ、「Columns」は列数を求めるプロパティです。

1 選択範囲の行数の取得

処理内容:リスト範囲の行数・列数を数えます。
Sub Count1()
With Worksheets("Sheet1").Range("A1").CurrentRegion
MsgBox "行数 = " & .Rows.Count & vbCrLf & "列数 = " & .Columns.Count
End With
End Sub

2 オートフィルタによって絞り込まれた件数

処理内容:A列の値が15以上のデータを抽出し、件数を数えます。
Sub Count2()
Dim LastRow As Integer
Range("A1").AutoFilter Field:=1, Criteria1:=">=15"
With Range("A1").CurrentRegion
LastRow = .Rows(.Rows.Count).Row
End With
MsgBox Range("A1:A" & LastRow).SpecialCells(xlCellTypeVisible).Count
Range("A1").AutoFilter
End Sub

3 離れている複数のセル領域の行列を数える

処理内容:A1:B8,C10:D13の範囲の行・列数を数えます。
Sub Count3()
Dim i As Integer, R As Integer, C As Integer
Range("A1:B8,C10:D13").Select
With Selection
For i = 1 To .Areas.Count
R = R + .Areas(i).Rows.Count
C = C + .Areas(i).Columns.Count
Next i
End With
MsgBox "行 : " & R & vbCrLf & "列 : " & C
End Sub

4 指定した列範囲の異値件数をカウントする

処理内容:リスト範囲のA列で異なる値の数を数えます。
Sub Count4()
Dim I As Integer, J As Integer,rng As Range,CNT As Integer
Set rng = Range(Range("A1").CurrentRegion.Columns(1).Address)
CNT = rng.Count
If LTrim(rng(CNT)) = "" Then CNT = CNT - 1
For I = 1 To rng.Count - 1
For J = I + 1 To rng.Count
If rng(I) = rng(J) Or LTrim(rng(I)) = "" Then CNT = CNT - 1: Exit For
Next J
Next I
MsgBox CNT
End Sub





行番号・列番号の取得

「Row」と「Rows」、「Column」と「Columns」の相違
「Row」は行番号を求めるプロパティ、「Rows」は行数を求めるプロパティです。
「Column」は列番号を求めるプロパティ、「Columns」は列数を求めるプロパティです。

1 行番号を取得する

処理内容:アクティブセルの行番号を取得します。
Sub Row1()
MsgBox "アクティブセル行番号= " & ActiveCell.Row
End Sub


処理内容:選択されている範囲の先頭行番号を取得します。
Sub Row2()
MsgBox "先頭行番号= " & Range("A1").CurrentRegion.Row
End Sub


処理内容:選択されている範囲の最終行番号を取得します。
Sub Row3()
Range("A1").CurrentRegion.Select
MsgBox "最終行番号 = " & Selection.Rows.Count + Selection.Row - 1
End Sub
リスト範囲の行数にリスト範囲の(上端行番号-1)を加えた結果が最終行番号になります。
Selection.Rows.Count 'リスト範囲の行数
Selection.Row 'リスト範囲の左上端の行番号


処理内容:基準セル(A1)を含むリスト範囲の最終行番号を取得します。
Sub Row4()
MsgBox "最終行番号= " & Range("A1").CurrentRegion.End(xlDown).Row
End Sub
リスト範囲の下方向にあるデータの最終行番号を取得します。


処理内容:基準セル(C5)と同じ列の最終行番号を取得します。
Sub Row5()
MsgBox "最終行番号= " & Range("C5").End(xlDown).Row
End Sub
セルC5の下方向にあるデータ範囲の最終行番号を取得します。


処理内容:ワークシートの左端列データ最終行番号を取得します。
Sub Row6()
MsgBox "最終行番号 = " & Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
End Sub
ワークシートの最終行から上方向にある最初のデータの行番号を取得します。





2 列番号を取得する

処理内容:アクティブセルの列番号を取得します。
Sub Column1()
MsgBox "アクティブセル列番号= " & ActiveCell.Column
End Sub


処理内容:選択されている範囲の先頭列番号を取得します。
Sub Column2()
MsgBox "先頭列番号= " & Range("A1").CurrentRegion.Column
End Sub


処理内容:選択されている範囲の最終列番号を取得します。
Sub Column3()
Range("A1").CurrentRegion.Select
MsgBox "最終列番号 = " & Selection.Columns.Count + Selection.Column - 1
End Sub
リスト範囲の列数にリスト範囲の(左端列番号-1)を加えた結果が最終列番号になります。
Selection.Columns.Count 'リスト範囲の列数
Selection.Column 'リスト範囲の左上端の列番号


処理内容:基準セル(A1)を含むリスト範囲の最終列番号を取得します。
Sub Column4()
MsgBox "最終列番号= " & Range("A1").CurrentRegion.End(xlToRight).Column
End Sub
リスト範囲の右方向にあるデータの最終列番号を取得します。


処理内容:基準セル(C5)と同じ列の最終列番号を取得します。
Sub Column5()
MsgBox "最終列番号= " & Range("C5").End(xlToRight).Column
End Sub
セルC5の右方向にあるデータ範囲の最終列番号を取得します。


処理内容:ワークシートの右端列データ最終列番号を取得します。
Sub Column6()
MsgBox "最終列番号 = " & Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
End Sub
ワークシートの最終列から左方向にある最初のデータの列番号を取得します。





座標名の表示形式と参照形式

 摘   要 A1形式 R1C1形式
表示形式   列番号をアルファベット、行番号を数値で表示する形式です。
C列3行目のセルを表すには「C3」とします。
 行番号は、R3 のように、行を意味する R と行番号を意味する数値を組み合わせて表します。
 列番号は、C3 のように、列を意味する C と列番号を意味する数値を組み合わせて表します。
 例えば、「R3C3」は、3 行目の 3 列目を表し、A1形式の「C3」 と同じ意味になります。
表示形式の指定方法 セル範囲.Address(ReferenceStyle:=xlA1)
引数は省略可(既定値)
セル範囲.Address(ReferenceStyle:=xlR1C1)
引数は省略不可
参照形式の指定方法 行の参照形式
絶対参照・・・Addressの引数で、RowAbsolute:=True を指定します。
(引数は省略可能です。・・・既定値)
相対参照・・・Addressの引数で、RowAbsolute:=False)を指定します。
(引数は省略できません)
列の参照形式
絶対参照・・・Addressの引数で、ColumnAbsolute:=True を指定します。
(引数は省略可能です。・・・既定値)
相対参照・・・Addressの引数で、ColumnAbsolute:=False を指定します。
(引数は省略できません)

A1形式によるセル番地の取得
例:リスト範囲が セルB4:C11のセル番地取得結果。
絶対参照のときは、列番号または行番号の前に「$」マークが付きます。
参照形式 指     定     方     法
列・行絶対参照 Range("B4").Currentregion.Select
Rng = Selection.Address
$B$4:$C$11
列・相対参照
行・絶対参照
Range("B4").Currentregion.Select
Rng =Selection.Address(ColumnAbsolute:=False)
Rng =Selection.Address(,False)  '省略形
B$4:C$11
列・絶対参照
行・相対参照
Range("B4").Currentregion.Select
Rng =Selection.Address(RowAbsolute:=False)
Rng =Selection.Address(False)  '省略形
$B4:$C11
列・行相対参照 Range("B4").Currentregion.Select
Rng =Selection.Address(ColumnAbsolute:=False,RowAbsolute:=False)
Rng =Selection.Address(False,False)  '省略形
B4:C11

R1C1形式によるセル番地の取得
例:リスト範囲がセルB4:C11のセル番地取得結果。
相対参照のときは、列番号または行番号が[ ]で囲まれます。
参照形式 指     定     方     法
列・行絶対参照 Range("B4").Currentregion.Select
Rng = Selection.Address(ReferenceStyle:=xlR1C1)
R4C2:R11C3
列・相対参照
行・絶対参照
Range("B4").Currentregion.Select
Rng = Selection.Address(ReferenceStyle:=xlR1C1,ColumnAbsolute:=False)
R4C[2]:R11C[3]
列・絶対参照
行・相対参照
Range("B4").Currentregion.Select
Rng = Selection.Address(ReferenceStyle:=xlR1C1,RowAbsolute:=False)
R[4]C2:R[11]C3
列・行相対参照 Range("B4").Currentregion.Select
Rng = Selection.Address(ReferenceStyle:=xlR1C1,  _
ColumnAbsolute:=False,RowAbsolute:=False)
R[4[C[2]:R[11]C[3]





座標名の取得

1 選択範囲の四隅の番地を取得する

処理内容:左上端セル(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_1()
MsgBox "左上端= " & Range("A1").CurrentRegion.Item(1).Address
End Sub


処理内容:右上端セル(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_2()
Range("A1").CurrentRegion.Select
MsgBox "右上端= " & Selection.Item(Selection.Columns.Count).Address
End Sub


処理内容:左下端セル(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_3()
Range("A1").CurrentRegion.Select
MsgBox "左下端= " & Selection.Item(Selection.Rows.Count, 1).Address
End Sub


処理内容:右下端セル(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_4()
Range("A1").CurrentRegion.Select
MsgBox "右下端= " & Selection.Item(Selection.Count).Address
End Sub

2 選択範囲の指定列・行番地を取得する

処理内容:選択範囲内の指定列セル範囲(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_5()
Dim Retsu As Long
Retsu = 2
MsgBox "列範囲= " & Range("A1").CurrentRegion.Columns(Retsu).Address
End Sub


処理内容:選択範囲内の指定行セル範囲(A1形式絶対参照)番地を取得します。
Sub A1_R1C1_6()
Dim Gyou As Long
Gyou = 3
MsgBox "行範囲= " & Range("A1").CurrentRegion.Rows(Gyou).Address
End Sub





参照形式の変換

1 式の参照形式をA1形式からR1C1形式に変換

処理内容:A1形式からR1C1形式に計算式を変換します。
Sub A1_R1C1_7()
inputFormula = "=SUM(B10:B15)"
MsgBox Application.ConvertFormula(Formula:=inputFormula, _
fromReferenceStyle:=xlA1, toReferenceStyle:=xlR1C1,ToAbsolute:=xlAbsolute)
End Sub
ToAbsolute のパラメータ:xlRelative 相対参照,xlAbsolute 絶対参照
xlAbsRowRelColumn 列 = 相対, 行 = 絶対,xlRelRowAbsColumn 列 = 絶対, 行 = 相対

2 式の参照形式をR1C1形式からA1形式に変換

処理内容:R1C1形式からA1形式に計算式を変換します。
Sub A1_R1C1_8()
inputFormula = "=SUM(R10C2:R15C2)"
MsgBox Application.ConvertFormula(Formula:=inputFormula, _
fromReferenceStyle:=xlR1C1, toReferenceStyle:=xlA1,ToAbsolute:=xlRelative)
End Sub





セルの状態を調べる

1 エラーの種類を調べる

処理内容:アクティブセルがエラーのとき、エラー内容を表示します。
Sub CellTest_1()
If IsError(ActiveCell.Value) Then
Errmsg = ActiveCell.Value
Select Case Errmsg
Case CVErr(xlErrDiv0): MsgBox "#DIV/0! エラー"
Case CVErr(xlErrNA): MsgBox "#N/A エラー"
Case CVErr(xlErrName): MsgBox "#NAME? エラー"
Case CVErr(xlErrNull): MsgBox "#NULL! エラー"
Case CVErr(xlErrNum): MsgBox "#NUM! エラー"
Case CVErr(xlErrRef): MsgBox "#REF! エラー"
Case CVErr(xlErrValue): MsgBox "#VALUE! エラー"
Case Else: MsgBox "ありえないケースです!!"
End Select
End If
End Sub

2 値の種類を調べる

処理内容:値を日付に変換できるかどうかを調べます。
Sub CellTest_2()
Test1 = "2001,1,1"
MsgBox IsDate(Test1) ' True を返します。
End Sub


処理内容:変数がEmpty値かどうかを調べます。
Sub CellTest_3()
Test2 = Null
MsgBox IsEmpty(Test2) ' False を返します。
End Sub


処理内容:ア>Range("A1")の値がエラー値かどうかを調べます。
Sub CellTest_4()
Range("A1").Formula="=5/0"
MsgBox IsError(Range("A1")) ' True を返します。
End Sub


処理内容:変数の値がNullかどうかを調べます。
Sub CellTest_5()
Test3 = ""
MsgBox IsNull(Test3) ' False を返します。
End Sub


処理内容:式が数値として評価できるかどうかを調べます。
Sub CellTest_6()
Dim Test4 As String, Test5 As Integer
Test4 = "123"  '文字列タイプの数字
Test5 = 456   '数値タイプの数字
MsgBox IsNumeric(Test4)  ' True を返します。
MsgBox Application.WorksheetFunction.IsNumber(Test4) ' False を返します。
MsgBox IsNumeric(Test5)  ' True を返します。
MsgBox Application.WorksheetFunction.IsNumber(Test5) ' True  を返します。
End Sub
「IsNumeric」関数は、数値として評価できれば、文字列タイプの数字でも数値と見なします。
「IsNumber」関数は、数値タイプの数字のみ数値と見なします。

3 セルの状態を調べる

処理内容:結合セルかどうかを調べ、結合セルの場合はセル範囲を表示します。
Sub CellTest_7()
Range("A1:D3").Select
Selection.Merge
If Selection.MergeCells Then
左上端 = Selection.Item(1).Address
右下端 = Selection.Item(Selection.Count).Address
MsgBox 左上端 & vbCrLf & 右下端
End If
End Sub


処理内容:セルA1の背景色を調べます。
Sub CellTest_8()
Range("A1").Interior.Color = RGB(0, 0, 255)
MsgBox "色番号 = " & Range("A1").Interior.ColorIndex
End Sub


4 セル内の文字数を調べる

処理内容:セルの文字列タイプの文字数のみ数えます。
Sub CellTest_9()
On Error GoTo ErrorTrap
Range("A1").Value="123"
Range("A2").Value="あいう"
Range("A3").Value=123
Range("A4").Value = "123あいう"
For I = 1 To 4
MsgBox Cells(I, 1) & " の文字数= " & Cells(I, 1).Characters.Count
Next I
Exit Sub
ErrorTrap:
MsgBox Cells(I, 1) & " 数値タイプはカウントできません。"
Resume Next
End Sub


処理内容:セルの文字数(すべてのタイプ)を数えます。
Sub CellTest_10()
Range("A1").Value="123"
Range("A2").Value="あいう"
Range("A3").Value=123
Range("A4").Value = "123あいう"
For I = 1 To 4
MsgBox Cells(I, 1) & " の文字数= " & Len(Cells(I, 1))
Next I
End Sub





Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!